/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sisvoto.modeloTablas;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.AbstractCellEditor;
import javax.swing.Action;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import sisvoto.DAO.ConsultasBD;
import sisvoto.ModeloDAO.AnioParaleloDAO;
import sisvoto.ModeloDAO.CandidatoDAO;
import sisvoto.Utiles.Mensajes;
import sisvoto.modelo.Anio_Paralelo;
import sisvoto.modelo.Candidato;
import sisvoto.modelo.Elector;
import sisvoto.vista.BuscarElector;

/**
 *
 * @author Dianita
 */
public class BotonCellEditor extends AbstractCellEditor implements TableCellEditor {

    private Component componente;
    List<Anio_Paralelo> listatc = new ArrayList<>();
    String tabla;
    ModelTableTipoAnio modelotabla;
    ModelTableCandidatos modelotablacandidatos;
    JTable tablavista;
    String llamada;
    String tipo;
    String valor;
    Candidato cand;
    List<Candidato> candidats;
  

    public BotonCellEditor(ModelTableCandidatos modelo, JTable tabla, String llamada, String tipo, List<Candidato> candidatos) {
        this.modelotablacandidatos = modelo;
        this.tablavista = tabla;
        this.llamada = llamada;
        this.tipo = tipo;
        this.candidats = candidatos;
    }

    public BotonCellEditor(String nombretabla, List<Anio_Paralelo> lista, ModelTableTipoAnio modelo, JTable tabla, String llamada) {
        this.tabla = nombretabla;
        this.listatc = lista;
        this.modelotabla = modelo;
        this.tablavista = tabla;
        this.llamada = llamada;
    }

    @Override
    public Component getTableCellEditorComponent(final JTable table, final Object value, boolean isSelected, final int row, final int column) {

        if (llamada.equals("CANDIDATOS")) {
            if (tipo.equals("NUEVO")) {
                JButton boton = null;
                if (value instanceof JButton) {
                    boton = (JButton) value;
                    boton.setAction(new AbstractAction() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            cand = modelotablacandidatos.getLista().get(tablavista.getSelectedRow());
                            modelotablacandidatos.getLista().remove(cand);
                            tablavista.setModel(modelotablacandidatos);
                            modelotablacandidatos.tamanioColumnas(tablavista);
                            modelotablacandidatos.tamanioFilas(tablavista);
 
                        }
                    });
                }
                componente = boton;
                return boton;
            } else {
                JButton boton = null;
                if (value instanceof JButton) {
                    boton = (JButton) value;
                    boton.setAction(new AbstractAction() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            cand = modelotablacandidatos.getLista().get(tablavista.getSelectedRow());
                            candidats.remove(cand);
                            modelotablacandidatos.getLista().remove(cand);
                            CandidatoDAO cdao = new CandidatoDAO(cand);
                            try {
                                cdao.update();
                                cdao.remove();
                                new Mensajes().StandarTick(null, "Eliminado Correctamente");
                            } catch (Exception ex) {
                            }
                            tablavista.setModel(modelotablacandidatos);
                            modelotablacandidatos.tamanioColumnas(tablavista);
                            modelotablacandidatos.tamanioFilas(tablavista);
                        }
                    });
                }
                componente = boton;
                return boton;
            }
        }

        if (llamada.equals("ANIOPARALELO")) {
            JButton boton = null;
            if (value instanceof JButton) {
                boton = (JButton) value;
                boton.setAction(new AbstractAction() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (new Mensajes().ConfirmacionDialogowarning(null, "¿Está Seguro de Eliminar éste Registro?") == 0) {
                            Anio_Paralelo aniop = (Anio_Paralelo) listatc.get(table.getSelectedRow());
                            AnioParaleloDAO aniodao = new AnioParaleloDAO(aniop);
                            try {
                                aniodao.update();
                                aniodao.remove();
                                new Mensajes().StandarTick(null, "Eliminado con Éxito");
                                listatc = (List<Anio_Paralelo>) new ConsultasBD().buscarTodos(tabla);
                                modelotabla = new ModelTableTipoAnio(listatc);
                                tablavista.setModel(modelotabla);
                                tablavista.setDefaultRenderer(JButton.class, new BotonCellRenderer());
                                tablavista.setDefaultEditor(JButton.class, new BotonCellEditor(tabla, listatc, modelotabla, tablavista, "ANIOPARALELO"));
                                modelotabla.tamanioColumnas(tablavista);
                                modelotabla.tamanioFilas(tablavista);


                            } catch (Exception ex) {
                                System.out.println(ex);
                                new Mensajes().ConfirmacionDialogowarning(null, "El Registro No se Pudo Eliminar");
                            }

                        }

                    }
                });
            }
            componente = boton;
            return boton;
        }
        return null;
    }

    @Override
    public Object getCellEditorValue() {
        return componente;
    }

    public String getTabla() {
        return tabla;
    }

    public void setTabla(String tabla) {
        this.tabla = tabla;
    }
}
